import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { CategoryService } from './category.service';
import { Category } from '../../entities/category.entity';
import { Admin } from '../../common/decorators/admin.decorator';
import { ApiTags, ApiOperation, ApiResponse, ApiBody, ApiParam } from '@nestjs/swagger';

@ApiTags('分类管理（管理员）')
@Controller('api/admin/categories')
export class CategoryAdminController {
  constructor(private readonly categoryService: CategoryService) {}

  // 获取所有分类（管理员，包含禁用的）
  @Admin()
  @Get()
  @ApiOperation({
    summary: '获取所有分类（管理员）',
    description: '管理员获取所有分类，包括已禁用的分类',
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: [Category],
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  findAllAdmin() {
    return this.categoryService.findAll();
  }

  // 创建分类（管理员）
  @Admin()
  @Post()
  @ApiOperation({
    summary: '创建分类',
    description: '管理员创建新的文章分类',
  })
  @ApiBody({
    type: Category,
    description: '分类信息',
  })
  @ApiResponse({
    status: 201,
    description: '创建成功',
    type: Category,
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  create(@Body() categoryData: Partial<Category>) {
    return this.categoryService.create(categoryData);
  }

  // 更新分类（管理员）
  @Admin()
  @Patch(':id')
  @ApiOperation({
    summary: '更新分类',
    description: '管理员更新指定分类的信息',
  })
  @ApiParam({
    name: 'id',
    description: '分类ID',
    example: '1',
  })
  @ApiBody({
    type: Category,
    description: '更新的分类信息',
  })
  @ApiResponse({
    status: 200,
    description: '更新成功',
    type: Category,
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '分类不存在',
  })
  update(@Param('id') id: number, @Body() categoryData: Partial<Category>) {
    return this.categoryService.update(id, categoryData);
  }

  // 更新分类状态（管理员）
  @Admin()
  @Patch(':id/status')
  @ApiOperation({
    summary: '更新分类状态',
    description: '管理员更新分类的启用/禁用状态',
  })
  @ApiParam({
    name: 'id',
    description: '分类ID',
    example: '1',
  })
  @ApiBody({
    schema: {
      example: {
        isActive: 1, // 0禁用，1启用
      },
    },
  })
  @ApiResponse({
    status: 200,
    description: '更新成功',
    type: Category,
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '分类不存在',
  })
  updateStatus(@Param('id') id: number, @Body('isActive') isActive: number) {
    return this.categoryService.updateStatus(id, isActive);
  }


  // 删除分类（管理员）
  @Admin()
  @Delete(':id')
  @ApiOperation({
    summary: '删除分类',
    description: '管理员删除指定的分类',
  })
  @ApiParam({
    name: 'id',
    description: '分类ID',
    example: '1',
  })
  @ApiResponse({
    status: 200,
    description: '删除成功',
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '分类不存在',
  })
  remove(@Param('id') id: number) {
    return this.categoryService.remove(id);
  }


  
}